#include "element_niveau.h"
#include <iostream>
using namespace std;

element_niveau* creerElementNiveau(FILE* f,int nbrTer,element_niveau* precedent)
{
               element_niveau* eleniv;
               int num;
               eleniv=new(element_niveau);	///on alloue la place pour une liste de terrain
               fscanf(f,"%d\n",&num);	///puis on recupère le numero du terrain et on s'en sert pour
               elementNiveauSetNumTer(eleniv,num);	///initialiser le numero du terrain
               elementNiveauSetTerrain(eleniv,creerTerrain(f));	///on initialise le terrain
               elementNiveauSetPrecedant(eleniv,precedent);	///ainsi que le terrain precedent
               if(nbrTer>1)	///si il y a plus d'un terrain dans ce niveau
               {
                           nbrTer--;
                           elementNiveauSetSuivant(eleniv,creerElementNiveau(f,nbrTer,eleniv));	///on initialise le terrain suivant
               }
               else
               {
                    elementNiveauSetSuivant(eleniv,NULL);	///sinon on met le pointeur à NULL : c'est une façon d'indiquer qu'il n'y a pas d'autre terrain dans ce niveau
               }
               return eleniv;
}

void supprimeElementNiveau(element_niveau* eleniv)
{
     if(elementNiveauGetSuivant(eleniv) != NULL)///On supprime les elements par la fin de la liste
     {
                      supprimeElementNiveau(elementNiveauGetSuivant(eleniv));///On fait par recurrence
     }
     supprimeTerrain(elementNiveauGetTerrain(eleniv));///arrivé au bout de liste on supprime les terrains
     delete(eleniv);///et on libere la place
}

void afficheElementNiveau(element_niveau* eleniv)
{
     cout<<"numero du terrain : "<<elementNiveauGetNumTer(eleniv)<<endl;///on affiche le numero du terrain
     afficheTerrain(elementNiveauGetTerrain(eleniv));///puis le terrain
     if(elementNiveauGetSuivant(eleniv) != NULL)///si il y a un terrain suivant
     {
                      afficheElementNiveau(elementNiveauGetSuivant(eleniv));///on l'affiche comme l'actuel
     }
}

Terrain* elementNiveauGetTerrain(const element_niveau* eleniv)
{
         return eleniv->ter;
}

int elementNiveauGetNumTer(const element_niveau* eleniv)
{
    return eleniv->numTer;
}

element_niveau* elementNiveauGetSuivant(const element_niveau* eleniv)
{
               return eleniv->suivant;
}

element_niveau* elementNiveauGetPrecedant(const element_niveau* eleniv)
{
               return eleniv->precedant;
}

void elementNiveauSetTerrain(element_niveau* eleniv, Terrain* ter)
{
     eleniv->ter = ter;
}

void elementNiveauSetNumTer(element_niveau* eleniv, int nbr)
{
     eleniv->numTer=nbr;
}

void elementNiveauSetSuivant(element_niveau* eleniv, element_niveau* suivant)
{
     eleniv->suivant=suivant;
}

void elementNiveauSetPrecedant(element_niveau* eleniv, element_niveau* precedant)
{
     eleniv->precedant=precedant;
}

Terrain* elementNiveauChercheTerrain(element_niveau* eleniv,int numTer)
{
         if(elementNiveauGetNumTer(eleniv)==numTer)///si c'est déjà le bon
         {
                                                return elementNiveauGetTerrain(eleniv);///on le renvois
         }
         else///si c'est pas celui là on regarde le suivant, etc...
         {
             if(elementNiveauGetSuivant(eleniv)!=NULL)
             {
                return elementNiveauChercheTerrain(elementNiveauGetSuivant(eleniv),numTer);
             }
             else///et s'il existe pas, on le dit :p
             {
                 cout<<"ce terrain n'existe pas"<<endl;
                 return NULL;
             }
         }
}
